﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace PickGold
{
	/// <summary>
	/// 异步委托调用
	/// </summary>
	[ComVisible(true)]
	public interface IAsyncInvoker
	{
		/// <summary>
		/// 获取一个值，该值指示调用方在进行对象方法调用时是否必须调用 Invoke 方法，因为调用方位于创建当前对象所在的线程以外的线程中。
		/// </summary>
		bool InvokeRequired { get; }

		/// <summary>
		/// 在拥有此对象的基础线程上执行指定的委托。
		/// </summary>
		/// <param name="method">包含当前对象的线程上下文中调用的方法的委托。</param>
		/// <returns>正在被调用的委托的返回值，或者如果委托没有返回值，则为 null。</returns>
		object Invoke(Delegate method);

		/// <summary>
		/// 在拥有此对象的基础线程上执行指定的委托。
		/// </summary>
		/// <param name="method">
		/// 包含当前对象的线程上下文中调用的方法的委托。
		/// 它采用的参数的数量和类型与 args 参数中所包含的相同。
		/// </param>
		/// <param name="args">作为指定方法的参数传递的对象数组。如果此方法没有参数，该参数可以是 null。</param>
		/// <returns>正在被调用的委托的返回值，或者如果委托没有返回值，则为 null。</returns>
		object Invoke(Delegate method, params object[] args);
	}
}
